home *** CD-ROM | disk | FTP | other *** search
- unit Main;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ComObj, POETClasses, POETAutomation_TLB, StdCtrls, Grids, ExtCtrls;
-
- type
- TfrmMain = class(TForm)
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- cmdExit: TButton;
- Label4: TLabel;
- cmdAddMgr: TButton;
- cmdAddRep: TButton;
- cmdDelMgr: TButton;
- cmdDelRep: TButton;
- lstSmgrs: TListBox;
- lstSreps: TListBox;
- lstSmIdx: TListBox;
- lstSrIdx: TListBox;
- lstSAccts: TListBox;
- cmdAddAcct: TButton;
- cmdDelAcct: TButton;
- Label5: TLabel;
- lstSaIdx: TListBox;
- Image1: TImage;
- procedure cmdExitClick(Sender: TObject);
- procedure RefreshSRepList;
- procedure RefreshSMgrList;
- procedure RefreshAcctList;
- procedure FormCreate(Sender: TObject);
- procedure cmdAddMgrClick(Sender: TObject);
- procedure cmdAddRepClick(Sender: TObject);
- procedure cmdDelMgrClick(Sender: TObject);
- procedure cmdDelRepClick(Sender: TObject);
- procedure cmdDelAcctClick(Sender: TObject);
- procedure cmdAddAcctClick(Sender: TObject);
- procedure lstSrepsDblClick(Sender: TObject);
- procedure lstSmgrsDblClick(Sender: TObject);
- procedure lstSAcctsDblClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- const
- PtDEEP = 1;
- PtFLAT = 2 ;
- PtNO_ONDEMAND = 3;
- PtSHALLOW = 4;
- PtSTART = 1;
- PtCURRENT = 2;
- PtEnd = 3;
-
- var
- frmMain: TfrmMain;
- Salesbase: IPOETDatabase; //Many of the application variables are given
- DbIsOpen: Boolean; //global scope to simplify the code. In practice,
- SalesRep: PtSalesRep; //global variables do not make the most efficient
- SalesReps: IPOETExtent; //use of memory resources.
- SalesMgr: PtSalesMgr;
- SalesMgrs: IPOETExtent;
- Account: PtAccount;
- Accounts: IPOETExtent;
- RepAccount: PtAccount; //SalesRep Acct
- RepAccounts: OleVariant;
- SmSalesRep: PtSalesRep; //SalesMgr Rep
- SmSalesReps: OleVariant;
- AcctSalesRep: PtSalesRep; //Acct SalesRep
- AcctSalesReps: OleVariant;
- SMgrFactory:IPOETApplicationObjectFactory; //Factories for persistent objs
- SRepFactory:IPOETApplicationObjectFactory;
- AccountFactory: IPOETApplicationObjectFactory;
- SalesQuery: IPOETOQLQuery;
- QResult: OleVariant;
- QStr: string;
- FormSource: Integer; // 0=frmMain, 1=frmSRep, 2=frmSMgr, 3=frmAcct
-
- implementation
-
- uses Srep, Smgr, Acct, NewSmgr, NewSrep, NewAcct;
-
- {$R *.DFM}
-
-
- procedure TfrmMain.cmdExitClick(Sender: TObject);
- begin
- If DbIsOpen then Salesbase.Close;
- Application.Terminate;
- end;
-
- procedure TfrmMain.RefreshSRepList;
- begin
- lstSReps.Clear;
- lstSrIdx.Clear;
- If SalesReps.First then repeat
- SalesRep.PtObj := SalesReps.Get;
- lstSReps.Items.Add(SalesRep.GetLname + ', ' + SalesRep.GetFname);
- lstSrIdx.Items.Add(SalesRep.GetSurrogate);
- until not SalesReps.Next;
- end;
-
- procedure TfrmMain.RefreshSMgrList;
- begin
- lstSmgrs.Clear;
- lstSmIdx.Clear;
- If SalesMgrs.First then repeat
- SalesMgr.PtObj := SalesMgrs.Get;
- lstSmgrs.Items.Add(SalesMgr.GetLname + ', ' + SalesMgr.GetFname);
- lstSmIdx.Items.Add(SalesMgr.GetSurrogate);
- until not SalesMgrs.Next;
- end;
-
- procedure TfrmMain.RefreshAcctList;
- begin
- lstSAccts.Clear;
- lstSaIdx.Clear;
- If Accounts.First then repeat
- Account.PtObj := Accounts.Get;
- lstSAccts.Items.Add(Account.GetName);
- lstSaIdx.Items.Add(Account.GetSurrogate);
- until not Accounts.Next;
- end;
-
- procedure TfrmMain.FormCreate(Sender: TObject);
- begin
- FormSource := 0;
- DbIsOpen := False;
- Salesbase := CoDatabase.Create; //create and open database
- Salesbase.logicalDatabaseName:='salesauto.dat';
- Salesbase.logicalServerName:='LOCAL';
- Salesbase.Open;
- DbIsOpen := True;
- SalesMgr := PtSalesMgr.Create; //create encapsulated persistent objs.
- SalesRep := PtSalesRep.Create;
- Account := PtAccount.Create;
- SalesReps := CoExtent.Create; //create SalesReps extent
- SalesReps.Database := Salesbase;
- SalesReps.Classname := 'SalesRep';
- SalesMgrs := CoExtent.Create; //create SalesMgrs extent
- SalesMgrs.Database := Salesbase;
- SalesMgrs.Classname := 'SalesMgr';
- Accounts := CoExtent.Create; //create Accts extent
- Accounts.Database := Salesbase;
- Accounts.Classname := 'Account';
- AcctSalesRep := PtSalesRep.Create; //create Account SalesRep
- RepAccount := PtAccount.Create; //create SalesRep Acct
- SmSalesRep := PtSalesRep.Create; //create SalesMgr's SalesRep
- SMgrFactory := CoApplicationObjectFactory.Create;
- SMgrFactory.Database := Salesbase;
- SMgrFactory.ClassName := 'SalesMgr'; //create SalesMgr factory
- SRepFactory := CoApplicationObjectFactory.Create;
- SRepFactory.Database := Salesbase;
- SRepFactory.ClassName := 'SalesRep'; //create SalesRep factory
- AccountFactory := CoApplicationObjectFactory.Create;
- AccountFactory.Database := Salesbase;
- AccountFactory.ClassName := 'Account'; //create Acct factory
- RefreshSRepList;
- RefreshSMgrList;
- RefreshAcctList;
- end;
-
- procedure TfrmMain.cmdAddMgrClick(Sender: TObject);
- begin
- frmNewSMgr.show;
- end;
-
- procedure TfrmMain.cmdAddRepClick(Sender: TObject); //add SalesRep
- begin
- frmNewSRep.show;
- end;
-
- procedure TfrmMain.cmdDelMgrClick(Sender: TObject); //delete SalesMgr
- begin
- If lstSMgrs.ItemIndex < 0 then
- begin
- ShowMessage('Please make a selection!');
- exit;
- end;
- SalesMgrs.First;
- SalesMgrs.Seek(lstSMgrs.ItemIndex, PtSTART); //locate SalesMgr selected
- SalesMgr.PtObj := SalesMgrs.Get;
- SalesMgr.Delete(PtDEEP); //any SalesRep assigned this SalesMgr
- RefreshSMgrList; //now has invalid reference.
- end;
-
- procedure TfrmMain.cmdDelRepClick(Sender: TObject); //delete SalesRep
- var
- s: string;
- begin
- If lstSReps.ItemIndex < 0 then
- begin
- ShowMessage('Please make a selection!');
- exit;
- end;
- SalesReps.First;
- SalesReps.Seek(lstSReps.ItemIndex, PtSTART);
- SalesRep.PtObj := SalesReps.Get;
- s := SalesRep.GetSurrogate; //Set s to SalesRep object ID
- If SalesRep.PtObj.IsValidReference('SalesMgr') then //Remove reference
- begin //to this SalesRep
- SalesMgr.PtObj := SalesRep.GetSalesMgr; //in SalesMgr's Rep attribute
- SmSalesReps := SalesMgr.GetSalesReps; //set
- SmSalesReps.First;
- If SmSalesReps.First then repeat
- SmSalesRep.PtObj := SmSalesReps.Get;
- If SmSalesRep.GetSurrogate = s then break;
- until not SmSalesReps.Next;
- SmSalesReps.Delete;
- SalesMgr.Store(PtDEEP);
- end;
- RepAccounts := SalesRep.GetAccounts; //Remove reference to this
- If RepAccounts.First then repeat //SalesRep from Acct's Rep
- RepAccount.PtObj := RepAccounts.Get; //list
- AcctSalesReps := RepAccount.GetSalesReps;
- If AcctSalesReps.First then repeat
- AcctSalesRep.PtObj := AcctSalesReps.Get;
- If AcctSalesRep.GetSurrogate = s then AcctSalesReps.Delete;
- until not AcctSalesReps.Next;
- until not RepAccounts.Next;
- SalesRep.Delete(PtDeep);
- RefreshSRepList;
- end;
-
- procedure TfrmMain.cmdDelAcctClick(Sender: TObject); //delete account
- var
- s: string;
- begin
- If lstSAccts.ItemIndex < 0 then
- begin
- ShowMessage('Please make a selection!');
- exit;
- end;
- Accounts.First;
- s := lstSaIdx.Items[lstSAccts.ItemIndex]; //set s to Acct object ID
- Accounts.FindKey(s);
- Account.PtObj := Accounts.Get;
- AcctSalesReps := Account.GetSalesReps;
- if AcctSalesReps.First then repeat //remove reference to this
- SalesRep.PtObj := AcctSalesReps.Get; //account in SalesRep sets
- RepAccounts := SalesRep.GetAccounts;
- If RepAccounts.First then repeat
- RepAccount.PtObj := RepAccounts.Get;
- If RepAccount.GetSurrogate = s then RepAccounts.Delete;
- until not RepAccounts.Next;
- SalesRep.Store(PtDeep);
- until not AcctSalesReps.Next;
- Account.Delete (PtDEEP);
- RefreshAcctList;
- end;
-
- procedure TfrmMain.cmdAddAcctClick(Sender: TObject); //Add account
- begin
- frmNewAcct.show;
- end;
-
- procedure TfrmMain.lstSrepsDblClick(Sender: TObject); //display SalesRep info
- var
- s: string;
- ExistMgr: Boolean;
- begin
- ExistMgr := False;
- s := lstSrIdx.Items[lstSreps.ItemIndex];
- SalesReps.First;
- SalesReps.FindKey(s);
- SalesRep.PtObj := SalesReps.Get;
- frmSRep.lblInfo.Caption := SalesRep.GetFname + ' ' + SalesRep.GetLname
- + ' (' + SalesRep.GetId + ')' + chr(32)
- + chr(10) + SalesRep.GetAddr + chr(32) + chr(10) + SalesRep.GetCity + ', '
- + SalesRep.GetState + ' ' + SalesRep.GetZip;
- frmSRep.txtCSales.text := IntToStr(SalesRep.GetCurrentSales);
- frmSRep.txtTSales.text := IntToStr(SalesRep.GetTargetQuota);
- frmSRep.cboSMgr.Clear;
- if SalesRep.PtObj.IsValidReference('SalesMgr') then //chk if Rep has been assigned
- begin //a SalesMgr
- SalesMgr.PtObj := SalesRep.GetSalesMgr;
- s := SalesMgr.GetSurrogate;
- frmSRep.cboSMgr.text := SalesMgr.GetLname + ', ' + SalesMgr.GetFname;
- end
- else frmSRep.cboSMgr.text := '';
- If SalesMgrs.First then repeat
- SalesMgr.PtObj := SalesMgrs.Get;
- if SalesMgr.GetSurrogate = s then ExistMgr := True; //Chk if SalesMgr has been deleted
- frmSRep.cboSMgr.Items.Add(SalesMgr.GetLName + ', ' + SalesMgr.GetFname);
- frmSRep.lstSmIdx.Items.Add(SalesMgr.GetSurrogate);
- until not SalesMgrs.Next;
- If ExistMgr = False then frmSRep.cboSMgr.text := '';
- RepAccounts := SalesRep.GetAccounts; //display SalesRep's list of accts
- frmSRep.lstRepAccts.Clear;
- frmSRep.lstSaIdx.Clear;
- If RepAccounts.First then repeat
- RepAccount.PtObj := RepAccounts.Get;
- frmSRep.lstRepAccts.Items.Add(RepAccount.GetName);
- frmSRep.lstSaIdx.Items.Add(RepAccount.GetSurrogate);
- until not RepAccounts.Next;
- frmSRep.show;
- end;
-
- procedure TfrmMain.lstSmgrsDblClick(Sender: TObject); //display SalesMgr info
- var
- s: string;
- begin
- s := lstSmIdx.Items[lstSmgrs.ItemIndex];
- SalesMgrs.FindKey(s);
- SalesMgr.PtObj := SalesMgrs.Get;
- frmSMgr.lblInfo.Caption := SalesMgr.GetFname + ' ' + SalesMgr.GetLname
- + ' (' + SalesMgr.GetId + ')'+ chr(32)
- + chr(10) + SalesMgr.GetAddr + chr(32) + chr(10) + SalesMgr.GetCity + ', '
- + SalesMgr.GetState + ' ' + SalesMgr.GetZip;
- frmSMgr.ckCar.Checked := SalesMgr.GetCompanyCar;
- frmSMgr.ckGym.Checked := SalesMgr.GetGymMembership;
- frmSMgr.txtStocks.text := IntToStr(SalesMgr.GetStocks);
- SmSalesReps := SalesMgr.GetSalesReps;
- frmSMgr.lstSmSReps.Clear;
- If SmSalesReps.First then repeat //Get assigned SalesReps list
- SalesRep.PtObj := SmSalesReps.Get;
- frmSMgr.lstSmSReps.Items.Add(SalesRep.GetLname + ', ' + SalesRep.GetFname);
- frmSMgr.lstSmSrIdx.Items.Add(SalesRep.GetSurrogate);
- until not SmSalesReps.Next;
- frmSMgr.txtGSales.text := IntToStr(SalesMgr.GetCurrentSales);
- frmSMgr.txtTSales.text := IntToStr(SalesMgr.GetTargetSales);
- frmSMgr.show;
- end;
-
- procedure TfrmMain.lstSAcctsDblClick(Sender: TObject); //display Acct info
- var
- s: string;
- begin
- s := lstSaIdx.Items[lstSAccts.ItemIndex];
- Accounts.FindKey(s);
- Account.PtObj := Accounts.Get;
- frmAcct.lblInfo.Caption := Account.GetId + Chr(32) + chr(10) + Account.GetName
- + Chr(32) + chr(10) + Account.GetContact;
- AcctSalesReps := Account.GetSalesReps; //display list of reps assigned
- frmAcct.lstAcctReps.Clear; //to this account
- frmAcct.lstArIdx.Clear;
- If AcctSalesReps.First then repeat
- SalesRep.PtObj := AcctSalesReps.Get;
- frmAcct.lstAcctReps.Items.Add(SalesRep.GetLname + ', ' + SalesRep.GetFname);
- frmAcct.lstArIdx.Items.Add(SalesRep.GetSurrogate);
- until not AcctSalesReps.Next;
- frmAcct.show;
- end;
-
- end.
-